home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / term-source.lha / ASCIIPanel.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  9KB  |  446 lines

  1. /*
  2. **    ASCIIPanel.c
  3. **
  4. **    User interface for built-in ASCII transfer routines
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_BYTES=1000,GAD_INFORMATION,GAD_CHARDELAY,GAD_LINEDELAY,
  17.             GAD_PACING,GAD_QUIET_TRANSFER,GAD_SKIP,GAD_ABORT
  18.         };
  19.  
  20. STATIC LayoutHandle    *ASCIIHandle;
  21. STATIC struct List     MessageList;
  22. STATIC LONG             MessageCount;
  23.  
  24. struct Window *
  25. CreateASCIIWindow(BOOL Send)
  26. {
  27.     NewList(&MessageList);
  28.  
  29.     MessageCount = 0;
  30.  
  31.     if(ASCIIHandle = LT_CreateHandleTags(Window->WScreen,
  32.         LAHN_LocaleHook,&LocaleHook,
  33.     TAG_DONE))
  34.     {
  35.         struct Window *PanelWindow;
  36.         LONG WindowLeft,WindowTop,IgnoreWidth,IgnoreHeight;
  37.  
  38.         LT_New(ASCIIHandle,
  39.             LA_Type,    VERTICAL_KIND,
  40.         TAG_DONE);
  41.         {
  42.             LT_New(ASCIIHandle,
  43.                 LA_Type,        VERTICAL_KIND,
  44.                 LA_LabelID,    MSG_V36_0000,
  45.             TAG_DONE);
  46.             {
  47.                 LT_New(ASCIIHandle,
  48.                     LA_Type,            BOX_KIND,
  49.                     LA_ID,                GAD_BYTES,
  50.                     LABX_FirstLabel,    MSG_ASCIIPANEL_BYTES_GAD,
  51.                     LABX_LastLabel,        MSG_ASCIIPANEL_LINES_GAD,
  52.                     LABX_ReserveSpace,    TRUE,
  53.                     LA_Chars,            50,
  54.                 TAG_DONE);
  55.  
  56.                 LT_New(ASCIIHandle,
  57.                     LA_Type,            LISTVIEW_KIND,
  58.                     LA_LabelID,            MSG_ASCIIPANEL_INFORMATION_GAD,
  59.                     LA_LabelPlace,        PLACE_Left,
  60.                     LA_ID,                GAD_INFORMATION,
  61.                     LALV_Lines,            2,
  62.                     LALV_MaxGrowX,        70,
  63.                     LALV_MaxGrowY,        10,
  64.                     LALV_CursorKey,        TRUE,
  65.                     GTLV_ReadOnly,        TRUE,
  66.                     GTLV_Labels,        &MessageList,
  67.                 TAG_DONE);
  68.  
  69.                 LT_EndGroup(ASCIIHandle);
  70.             }
  71.  
  72.             if(Send)
  73.             {
  74.                 LT_New(ASCIIHandle,
  75.                     LA_Type,                VERTICAL_KIND,
  76.                     LA_LabelID,                MSG_V36_0003,
  77.                     LAGR_LastAttributes,    TRUE,
  78.                 TAG_DONE);
  79.                 {
  80.                     LT_New(ASCIIHandle,
  81.                         LA_Type,            SliderType,
  82.                         LA_LabelID,            MSG_ASCIIPANEL_CHAR_DELAY_GAD,
  83.                         LA_ID,                GAD_CHARDELAY,
  84.                         GTSL_Min,            0,
  85.                         GTSL_Max,            10 * 100,
  86.                         LA_WORD,            &Config->TransferConfig->CharDelay,
  87.                         GTSL_LevelFormat,    "%s s",
  88.                         GTSL_DispFunc,        StandardShowTime,
  89.                     TAG_DONE);
  90.  
  91.                     LT_New(ASCIIHandle,
  92.                         LA_Type,            SliderType,
  93.                         LA_LabelID,            MSG_ASCIIPANEL_LINE_DELAY_GAD,
  94.                         LA_ID,                GAD_LINEDELAY,
  95.                         GTSL_Min,            0,
  96.                         GTSL_Max,            10 * 100,
  97.                         LA_WORD,            &Config->TransferConfig->LineDelay,
  98.                         GTSL_LevelFormat,    "%s s",
  99.                         GTSL_DispFunc,        StandardShowTime,
  100.                     TAG_DONE);
  101.  
  102.                     LT_New(ASCIIHandle,
  103.                         LA_Type,            CYCLE_KIND,
  104.                         LA_LabelID,            MSG_ASCIIPANEL_TEXT_PACING_GAD,
  105.                         LA_ID,                GAD_PACING,
  106.                         LA_UBYTE,            &Config->TransferConfig->PacingMode,
  107.                         LACY_FirstLabel,    MSG_ASCIIPANEL_DIRECT_TXT,
  108.                         LACY_LastLabel,        MSG_ASCIIPANEL_KEYDELAY_TXT,
  109.                     TAG_DONE);
  110.  
  111.                     LT_New(ASCIIHandle,
  112.                         LA_Type,            CHECKBOX_KIND,
  113.                         LA_LabelID,            MSG_ASCIIPANEL_QUIET_TRANSFER_GAD,
  114.                         LA_ID,                GAD_QUIET_TRANSFER,
  115.                         LA_BYTE,            &Config->TransferConfig->QuietTransfer,
  116.                     TAG_DONE);
  117.  
  118.                     LT_EndGroup(ASCIIHandle);
  119.                 }
  120.  
  121.                 LT_New(ASCIIHandle,
  122.                     LA_Type,VERTICAL_KIND,
  123.                 TAG_DONE);
  124.                 {
  125.                     LT_New(ASCIIHandle,
  126.                         LA_Type,        XBAR_KIND,
  127.                         LAXB_FullSize,    TRUE,
  128.                     TAG_DONE);
  129.  
  130.                     LT_EndGroup(ASCIIHandle);
  131.                 }
  132.  
  133.                 LT_New(ASCIIHandle,LA_Type,HORIZONTAL_KIND,
  134.                     LAGR_SameSize,    TRUE,
  135.                     LAGR_Spread,    TRUE,
  136.                 TAG_DONE);
  137.                 {
  138.                     LT_New(ASCIIHandle,
  139.                         LA_Type,        BUTTON_KIND,
  140.                         LA_LabelID,        MSG_TRANSFERPANEL_SKIP_CURRENT_FILE_GAD,
  141.                         LA_ID,            GAD_SKIP,
  142.                         LABT_ExtraFat,    TRUE,
  143.                     TAG_DONE);
  144.  
  145.                     LT_New(ASCIIHandle,
  146.                         LA_Type,        BUTTON_KIND,
  147.                         LA_LabelID,        MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
  148.                         LA_ID,            GAD_ABORT,
  149.                         LABT_ExtraFat,    TRUE,
  150.                     TAG_DONE);
  151.  
  152.                     LT_EndGroup(ASCIIHandle);
  153.                 }
  154.             }
  155.             else
  156.             {
  157.                 LT_New(ASCIIHandle,
  158.                     LA_Type,    VERTICAL_KIND,
  159.                 TAG_DONE);
  160.                 {
  161.                     LT_New(ASCIIHandle,
  162.                         LA_Type,        XBAR_KIND,
  163.                         LAXB_FullSize,    TRUE,
  164.                     TAG_DONE);
  165.  
  166.                     LT_EndGroup(ASCIIHandle);
  167.                 }
  168.  
  169.                 LT_New(ASCIIHandle,
  170.                     LA_Type,    HORIZONTAL_KIND,
  171.                 TAG_DONE);
  172.                 {
  173.                     LT_New(ASCIIHandle,
  174.                         LA_Type,        BUTTON_KIND,
  175.                         LA_LabelID,        MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
  176.                         LA_ID,            GAD_ABORT,
  177.                         LABT_ExtraFat,    TRUE,
  178.                     TAG_DONE);
  179.  
  180.                     LT_EndGroup(ASCIIHandle);
  181.                 }
  182.             }
  183.  
  184.             LT_EndGroup(ASCIIHandle);
  185.         }
  186.  
  187.         GetWindowInfo(WINDOW_FILETRANSFER,&WindowLeft,&WindowTop,&IgnoreWidth,&IgnoreHeight,0,0);
  188.  
  189.         if(PanelWindow = LT_Build(ASCIIHandle,
  190.             LAWN_TitleText,        Send ? LocaleString(MSG_ASCIIPANEL_SENDING_TXT) : LocaleString(MSG_ASCIIPANEL_RECEIVING_TXT),
  191.             LAWN_HelpHook,        &GuideHook,
  192.             LAWN_Parent,        Window,
  193.             LAWN_Left,            WindowLeft,
  194.             LAWN_Top,            WindowTop,
  195.             LAWN_LimitWidth,    WindowWidth,
  196.             LAWN_LimitHeight,    WindowHeight,
  197.             WA_DepthGadget,        TRUE,
  198.             WA_DragBar,            TRUE,
  199.             WA_RMBTrap,            TRUE,
  200.             WA_SimpleRefresh,    TRUE,
  201.         TAG_DONE))
  202.         {
  203.             BOOL Activate,Move;
  204.  
  205.             GuideContext(CONTEXT_ASCII);
  206.  
  207.             if(Config->MiscConfig->AlertMode == ALERT_SCREEN || Config->MiscConfig->AlertMode == ALERT_BEEP_SCREEN)
  208.                 Move = Activate = TRUE;
  209.             else
  210.             {
  211.                 ULONG IntuiLock;
  212.  
  213.                 Move = FALSE;
  214.  
  215.                 IntuiLock = LockIBase(NULL);
  216.  
  217.                 if(IntuitionBase->ActiveScreen == PanelWindow->WScreen)
  218.                     Activate = TRUE;
  219.                 else
  220.                     Activate = FALSE;
  221.  
  222.                 UnlockIBase(IntuiLock);
  223.             }
  224.  
  225.             if(Move)
  226.             {
  227.                 if(PanelWindow->WScreen->LeftEdge > 0)
  228.                 {
  229.                     if(PanelWindow->WScreen->TopEdge > 0)
  230.                         MoveScreen(PanelWindow->WScreen,-PanelWindow->WScreen->LeftEdge,-PanelWindow->WScreen->TopEdge);
  231.                     else
  232.                         MoveScreen(PanelWindow->WScreen,-PanelWindow->WScreen->LeftEdge,0);
  233.                 }
  234.                 else
  235.                 {
  236.                     if(PanelWindow->WScreen->TopEdge > 0)
  237.                         MoveScreen(PanelWindow->WScreen,0,-PanelWindow->WScreen->TopEdge);
  238.                 }
  239.  
  240.                 WindowToFront(PanelWindow);
  241.  
  242.                 ScreenToFront(PanelWindow->WScreen);
  243.             }
  244.  
  245.             if(Activate)
  246.                 ActivateWindow(PanelWindow);
  247.  
  248.             PushWindow(PanelWindow);
  249.  
  250.             return(PanelWindow);
  251.         }
  252.  
  253.         LT_DeleteHandle(ASCIIHandle);
  254.  
  255.         ASCIIHandle = NULL;
  256.     }
  257.  
  258.     return(NULL);
  259. }
  260.  
  261. VOID
  262. DeleteASCIIWindow(struct Window *Window,BOOL WaitForIt)
  263. {
  264.     if(WaitForIt && Window && ASCIIHandle)
  265.     {
  266.         struct IntuiMessage *Message;
  267.         struct Gadget *MsgGadget;
  268.         ULONG MsgClass;
  269.         BOOL Done;
  270.         LONG i;
  271.  
  272.         for(i = GAD_CHARDELAY ; i <= GAD_SKIP ; i++)
  273.             LT_SetAttributes(ASCIIHandle,i,GA_Disabled,TRUE,TAG_DONE);
  274.  
  275.         Done = FALSE;
  276.  
  277.         do
  278.         {
  279.             if(Wait(PORTMASK(Window->UserPort) | SIG_BREAK) & SIG_BREAK)
  280.                 break;
  281.  
  282.             while(Message = (struct IntuiMessage *)LT_GetIMsg(ASCIIHandle))
  283.             {
  284.                 MsgClass    = Message->Class;
  285.                 MsgGadget    = (struct Gadget *)Message->IAddress;
  286.  
  287.                 LT_ReplyIMsg(Message);
  288.  
  289.                 if(MsgClass == IDCMP_GADGETUP && MsgGadget->GadgetID == GAD_ABORT)
  290.                     Done = TRUE;
  291.             }
  292.         }
  293.         while(!Done);
  294.     }
  295.  
  296.     if(Window && ASCIIHandle)
  297.         PopWindow();
  298.  
  299.     if(ASCIIHandle)
  300.     {
  301.         PutWindowInfo(WINDOW_FILETRANSFER,ASCIIHandle->Window->LeftEdge,ASCIIHandle->Window->TopEdge,ASCIIHandle->Window->Width,ASCIIHandle->Window->Height);
  302.  
  303.         LT_DeleteHandle(ASCIIHandle);
  304.  
  305.         ASCIIHandle = NULL;
  306.     }
  307.  
  308.     if(MessageCount)
  309.     {
  310.         FreeList(&MessageList);
  311.  
  312.         MessageCount = 0;
  313.     }
  314. }
  315.  
  316. VOID
  317. AddASCIIMessage(STRPTR Message,...)
  318. {
  319.     UBYTE TempBuffer[256];
  320.     struct Node *Node;
  321.     va_list VarArgs;
  322.  
  323.     va_start(VarArgs,Message);
  324.     LimitedVSPrintf(sizeof(TempBuffer),TempBuffer,Message,VarArgs);
  325.     va_end(VarArgs);
  326.  
  327.     if(Node = CreateNode(TempBuffer))
  328.     {
  329.         if(MessageCount == 100)
  330.         {
  331.             FreeVecPooled(RemHead(&MessageList));
  332.  
  333.             MessageCount = 99;
  334.         }
  335.  
  336.         LT_SetAttributes(ASCIIHandle,GAD_INFORMATION,
  337.             GTLV_Labels,~0,
  338.         TAG_DONE);
  339.  
  340.         AddTail(&MessageList,Node);
  341.  
  342.         LT_SetAttributes(ASCIIHandle,GAD_INFORMATION,
  343.             GTLV_Labels,&MessageList,
  344.             Kick30 ? GTLV_MakeVisible : GTLV_Top,MessageCount,
  345.         TAG_DONE);
  346.  
  347.         MessageCount++;
  348.     }
  349. }
  350.  
  351. VOID
  352. UpdateASCIIWindow(LONG Bytes,LONG MaxBytes,LONG Lines)
  353. {
  354.     if(Bytes != -1)
  355.     {
  356.         UBYTE LocalBuffer[40];
  357.  
  358.         if(MaxBytes)
  359.         {
  360.             LONG Percent = (100 * Bytes) / MaxBytes;
  361.  
  362.             if(Percent > 100)
  363.                 Percent = 100;
  364.  
  365.             if(LocaleBase)
  366.                 LimitedSPrintf(sizeof(LocalBuffer),LocalBuffer,"%lD (%ld%%)",Bytes,Percent);
  367.             else
  368.                 LimitedSPrintf(sizeof(LocalBuffer),LocalBuffer,"%ld (%ld%%)",Bytes,Percent);
  369.         }
  370.         else
  371.             LimitedSPrintf(sizeof(LocalBuffer),LocalBuffer,ConvNumber,Bytes);
  372.  
  373.         LT_SetAttributes(ASCIIHandle,GAD_BYTES,
  374.             LABX_Index,    0,
  375.             LABX_Text,    LocalBuffer,
  376.         TAG_DONE);
  377.     }
  378.  
  379.     if(Lines != -1)
  380.     {
  381.         UBYTE LocalBuffer[40];
  382.  
  383.         LimitedSPrintf(sizeof(LocalBuffer),LocalBuffer,ConvNumber,Lines);
  384.  
  385.         LT_SetAttributes(ASCIIHandle,GAD_BYTES,
  386.             LABX_Index,    1,
  387.             LABX_Text,    LocalBuffer,
  388.         TAG_DONE);
  389.     }
  390. }
  391.  
  392. BOOL
  393. HandleASCIIWindow()
  394. {
  395.     struct IntuiMessage *Message;
  396.     struct Gadget *MsgGadget;
  397.     ULONG MsgClass;
  398.  
  399.     while(Message = (struct IntuiMessage *)LT_GetIMsg(ASCIIHandle))
  400.     {
  401.         MsgClass    = Message->Class;
  402.         MsgGadget    = (struct Gadget *)Message->IAddress;
  403.  
  404.         LT_ReplyIMsg(Message);
  405.  
  406.         if(MsgClass == IDCMP_MOUSEMOVE)
  407.         {
  408.             SendSetup();
  409.  
  410.             ConfigChanged = TRUE;
  411.         }
  412.  
  413.         if(MsgClass == IDCMP_GADGETUP)
  414.         {
  415.             switch(MsgGadget->GadgetID)
  416.             {
  417.                 case GAD_PACING:
  418.                 case GAD_CHARDELAY:
  419.                 case GAD_LINEDELAY:
  420.  
  421.                     ASCIISendSetup();
  422.  
  423.                     ConfigChanged = TRUE;
  424.  
  425.                     break;
  426.  
  427.                 case GAD_QUIET_TRANSFER:
  428.  
  429.                     ConfigChanged = TRUE;
  430.  
  431.                     break;
  432.  
  433.                 case GAD_ABORT:
  434.  
  435.                     return(1);
  436.  
  437.                 case GAD_SKIP:
  438.  
  439.                     return(2);
  440.             }
  441.         }
  442.     }
  443.  
  444.     return(0);
  445. }
  446.